package muestraTecnologica;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author David Cuellar
 */
public class DataBase {
    
    private String userName, clave, url, query, query2;
    private Connection con;
    private Mensaje mensaje;
    private Statement st;
    private ResultSet rs;
    private ArrayList<String> proyectos;
    private ArrayList<String> datosAlumno;
    private String[][] datos;
    private int i,j;
    
    
    public Connection conectar()
    {

        try
        {
            mensaje = new Mensaje();
            userName = "uniagus";
            clave = "Adminuniagus*8";
            url = "jdbc:mysql://"+Main.host+":3306/uniagustiniana";
            Class.forName("com.mysql.jdbc.Driver").newInstance();
            con = DriverManager.getConnection(url, userName, clave);

            return con;

        }
        catch (Exception ex)
        {

            mensaje.advertencia("Error Conectando a la BD", ex);
            return con;
         }
    }
    
    public boolean testConect(){
        
        try
        {
            mensaje = new Mensaje();
            userName = "uniagus";
            clave = "Adminuniagus*8";
            url = "jdbc:mysql://"+Main.host+":3306/uniagustiniana";
            Class.forName("com.mysql.jdbc.Driver").newInstance();
            con = DriverManager.getConnection(url, userName, clave);
            
            mensaje.advertencia("Conexion a la BD Realizada");
            return true;
        }
        catch (Exception ex)
        {
            mensaje.advertencia("Error Conectando a la BD", ex);
            return false;
        }
    }

    /**
     * Cierra la conexion con la Base de Datos
     */
    public void cerrarConexion()
    {

        try
        {
            con.close();
            System.out.println("Conexion cerrada");

        }
        catch(Exception e)
        {
            mensaje.advertencia("Cerrando Conexion", e);
        }
    }
    
    /**
     * Login de Alumno
     * @param   ID la identificacion del alumno
     * @return  true si no ha votado, false si ya voto 
     */
    public byte loginUsuario(long ID){
        
        query = "SELECT Voto FROM alumnos WHERE idAlumnos = "+ID+"";
        
        try 
        {
            st = con.createStatement();
            rs = st.executeQuery(query);
            
            rs.next();
            System.out.println(rs.getString("Voto"));
            
            if(rs.wasNull())
            {
                return 1;
            }
            else
                return 0;
            
        } catch (SQLException ex) 
        {
            if(ex.toString().contains("empty result set")){
                return -1;
            }
            else{
                mensaje.errorSQL("Error al Consultar LoginUsiario", ex);
                System.out.println(ex.toString());
                return -1;
            }
            
        }
        
        
    }
 
 
    /**
     * Fill ComboBox Proyectos
     * @return 
     */
    public ArrayList<String> fillComboBox(){
        
        proyectos = new ArrayList<String>();
        query = "SELECT Nombre FROM proyectos";
        
        try
        {   
            st = con.createStatement();
            rs = st.executeQuery(query);
            
            while(rs.next()){
                
                proyectos.add(rs.getString("Nombre"));
            }
            
            return proyectos;
            
        }
        catch (SQLException ex) 
        {
            System.out.println(ex.toString());
            mensaje.errorSQL("Error al Consultar FillComboBox", ex);
            return null;
        }
        
    }
    
    /**
     * Cargo los labels del frame Votacion con los datos del alumno
     * @param   Id el id del Alumno
     * @return  los datos del alumno autenticado
     */
    public ArrayList<String> fillLabels(long Id){
        
        datosAlumno = new ArrayList<String>();
        byte i = 0;
        
        query = "CALL FillLabels("+Id+")";
        
        try
        {
            st = con.createStatement();
            rs = st.executeQuery(query);
            
            rs.next();
            
            datosAlumno.add(rs.getString("idAlumnos"));
            datosAlumno.add(rs.getString("Nombres"));
            datosAlumno.add(rs.getString("programas.Nombre"));
            datosAlumno.add(rs.getString("jornada.Nombre"));
            datosAlumno.add(rs.getString("programas.idProgramas"));
            

            return datosAlumno;
        }
        catch (SQLException ex)
        {
            System.out.println(ex.toString());
            mensaje.errorSQL("Error al Consultar FillLabels", ex);
            return null;
        }
        
    }

    public void votar(long IdAlumno, int idProyecto, int idPrograma){
        
        query = "CALL SumaAlumnosYProgramas("+IdAlumno+", "+idPrograma+")";
        query2 = "CALL SumaVotos("+idProyecto+");";
        
        try 
        {
            st = con.createStatement();
            st.executeUpdate(query);
            st.executeUpdate(query2);
            
            System.out.println("Update Realizado con Exito");
        }
        catch(SQLException ex) {
            mensaje.errorSQL("Error al Actualizar Votar", ex);            
        }   
        
    }
    
    /**
     * 
     * @return 
     */
    public String[][] top5(){
        
        i = 0;
        datos = new String[5][3];
        
        query = "CALL Top5";
       
        try 
        {
            st = con.createStatement();
            rs = st.executeQuery(query);
            
            while(i<5){
                
                if(rs.next()){
                    datos[i][0] = rs.getString("Nombre");
                    datos[i][1] = rs.getString("Responsable");
                    datos[i][2] = rs.getString("Total_Votos");
                    i++;
                }
                else{
                    break;
                }
            }
            
            return datos;
            
        }
        catch(SQLException ex) 
        {
            mensaje.errorSQL("Error en Consulta Top5", ex);
            return null;
        }
        
    }

    public String[][] votosXPrograma(){
        
        datos = new String[26][2];
        i=0;
        query = "CALL VotosxPrograma";
        
        try
        {      
            st = con.createStatement();
            rs = st.executeQuery(query);
            
            while(rs.next()){
                datos[i][0] = rs.getString("Nombre");
                datos[i][1] = rs.getString("Total_Votos");
                i++;
            }
            
            return datos;
            
        } 
        catch (SQLException ex) 
        {
            mensaje.errorSQL("Error en Consulta votosxPrograma", ex);
            return null;
        }
    }

    public String totalParticipantes(){
        
        query = "CALL TotalParticipantes";
        
        try 
        {
            st = con.createStatement();
            rs = st.executeQuery(query);
            
            rs.next();
            
            return rs.getString("Total Participnates");
            
        } 
        catch (SQLException ex) 
        {
            mensaje.errorSQL("Error en la Consulta", ex);
            return null;
        }
    }
}
